package fr.thelem.gestiondemandesthelem.dao.model;

import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REMOVE;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * 
 */

/**
 * Entité Categorie: Représente les catégories d'une demande
 */
@Entity
@Table(name = "CATEGORIE", uniqueConstraints = {@UniqueConstraint(columnNames = {"NOM_CATEGORIE", "IDENTIFIANT_TYPE_DEMANDE"})})
public class CategorieEntity implements Serializable {
    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "IDENTIFIANT_CATEGORIE")
    @GeneratedValue
    private int identifiantCategorie;

    @Column(name = "NOM_CATEGORIE")
    private String nomCategorie;

    @ManyToOne
    @JoinColumn(name = "IDENTIFIANT_TYPE_DEMANDE")
    private TypeDemandeEntity typeDemandeCategorie;

    @OneToMany(cascade = {PERSIST, REMOVE}, mappedBy = "categorieSousCategorie")
    private Collection<SousCategorieEntity> sousCategoriesCategorie;

    /**
     * Accesseur de identifiantCategorie
     * 
     * @return le identifiantCategorie
     */
    public int getIdentifiantCategorie() {
        return identifiantCategorie;
    }

    /**
     * Affectation de identifiantCategorie
     * 
     * @param identifiantCategorie identifiantCategorie à affecter
     */
    public void setIdentifiantCategorie(int identifiantCategorie) {
        this.identifiantCategorie = identifiantCategorie;
    }

    /**
     * Accesseur de nomCategorie
     * 
     * @return le nomCategorie
     */
    public String getNomCategorie() {
        return nomCategorie;
    }

    /**
     * Affectation de nomCategorie
     * 
     * @param nomCategorie nomCategorie à affecter
     */
    public void setNomCategorie(String nomCategorie) {
        this.nomCategorie = nomCategorie;
    }

    /**
     * Accesseur de typeDemandeCategorie
     * 
     * @return le typeDemandeCategorie
     */
    public TypeDemandeEntity getTypeDemandeCategorie() {
        return typeDemandeCategorie;
    }

    /**
     * Affectation de typeDemandeCategorie
     * 
     * @param typeDemandeCategorie typeDemandeCategorie à affecter
     */
    public void setTypeDemandeCategorie(TypeDemandeEntity typeDemandeCategorie) {
        this.typeDemandeCategorie = typeDemandeCategorie;
    }

    /**
     * Accesseur de sousCategoriesCategorie
     * 
     * @return le sousCategoriesCategorie
     */
    public Collection<SousCategorieEntity> getSousCategoriesCategorie() {
        return sousCategoriesCategorie;
    }

    /**
     * Affectation de sousCategoriesCategorie
     * 
     * @param sousCategoriesCategorie sousCategoriesCategorie à affecter
     */
    public void setSousCategoriesCategorie(Collection<SousCategorieEntity> sousCategoriesCategorie) {
        this.sousCategoriesCategorie = sousCategoriesCategorie;
    }
}
